{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TMM Demonstration Using Fabry Perot Etalon\n",
    "TMM is the foundation of RCWA so we first set up all the infrastructure to do TMM\n",
    "using scattering matrices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import sys\n",
    "module_path = os.path.abspath(os.path.join('../../'))\n",
    "if module_path not in sys.path:\n",
    "    sys.path.append(module_path)\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt;\n",
    "import cmath;\n",
    "from TMM_functions import PQ_matrices as pq\n",
    "from TMM_functions import scatter_matrices as sm\n",
    "from TMM_functions import redheffer_star as rs\n",
    "from TMM_functions import generate_initial_conditions as ic\n",
    "from scipy import linalg as LA\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------incident wave paramters----------------\n",
      "incident n_i: 1.0\n",
      "kx_inc: 0.8660254037844386 ky_inc: 0.0\n",
      "kz_inc: (0.5000000000000001+0j)\n",
      "-----------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "raw TMM formalism using scattering matrices using a single silicon slab (should see Fabry-Perot)\n",
    "'''\n",
    "\n",
    "#%% DEFINE SIMULATION PARAMETERS\n",
    "# TMM CAN FAIL IF KZ = 0 IN ANY MEDIA, which should be unlikely if kz != 0 in incident media\n",
    "\n",
    "#% General Units\n",
    "degrees = np.pi/180;\n",
    "L0 = 1e-6; #units of microns;\n",
    "eps0 = 8.854e-12;\n",
    "mu0 = 4*np.pi*10**-7;\n",
    "c0 = 1/(np.sqrt(mu0*eps0))\n",
    "I = np.matrix(np.eye(2,2)); #unit 2x2 matrix\n",
    "\n",
    "\n",
    "## normalized units\n",
    "#z' = k0*z;\n",
    "#k = k/k0;\n",
    "\n",
    "## REFLECTION AND TRANSMSSION SPACE epsilon and mu PARAMETERS\n",
    "m_r = 1; e_r = 1;\n",
    "m_t = 1; e_t = 1;\n",
    "\n",
    "## set wavelength scanning range\n",
    "wavelengths = L0*np.linspace(0.5,2,1000); #500 nm to 1000 nm\n",
    "kmagnitude_scan = 2 * np.pi / wavelengths; #no\n",
    "omega = c0 * kmagnitude_scan; #using the dispersion wavelengths\n",
    "\n",
    "thickness_slab = 0.76*L0; #100 nm;\n",
    "#source parameters\n",
    "theta = 60 * degrees; #%elevation angle\n",
    "phi = 0 * degrees; #%azimuthal angle\n",
    "\n",
    "## incident wave properties, at this point, everything is in units of k_0\n",
    "n_i = np.sqrt(e_r*m_r);\n",
    "\n",
    "#k0 = np.sqrt(kx**2+ky**2+kz**2); we know k0, theta, and phi\n",
    "\n",
    "#actually, in the definitions here, kx = k0*sin(theta)*cos(phi), so kx, ky here are normalized\n",
    "kx = n_i*np.sin(theta)*np.cos(phi); #constant in ALL LAYERS; kx = 0 for normal incidence\n",
    "ky = n_i*np.sin(theta)*np.sin(phi); #constant in ALL LAYERS; ky = 0 for normal incidence\n",
    "kz_inc = cmath.sqrt(e_r * m_r - kx ** 2 - ky ** 2);\n",
    "\n",
    "normal_vector = np.array([0, 0, -1]) #positive z points down;\n",
    "ate_vector = np.matrix([0, 1, 0]); #vector for the out of plane E-field\n",
    "#ampltidue of the te vs tm modes (which are decoupled)\n",
    "# pte = 1/np.sqrt(2);\n",
    "# ptm = cmath.sqrt(-1)/np.sqrt(2);\n",
    "pte = 1;\n",
    "ptm = 0\n",
    "print('--------incident wave paramters----------------')\n",
    "print('incident n_i: '+str(n_i))\n",
    "print('kx_inc: '+str(kx)+' ky_inc: '+str(ky))\n",
    "print('kz_inc: ' + str(kz_inc));\n",
    "print('-----------------------------------------------')\n",
    "\n",
    "\n",
    "## specify gap media\n",
    "e_h = 1; m_h = 1;\n",
    "Pg, Qg, kzg = pq.P_Q_kz(kx, ky, e_h, m_h)\n",
    "Wg = I; #Wg should be the eigenmodes of the E field, which paparently is the identity, yes for a homogeneous medium\n",
    "sqrt_lambda = cmath.sqrt(-1)*Wg;\n",
    "# remember Vg is really Qg*(Omg)^-1; Vg is the eigenmodes of the H fields\n",
    "Vg = Qg*Wg*(sqrt_lambda)**-1;\n",
    "\n",
    "#thickness 0 means L = 0, which only pops up in the xponential part of the expression\n",
    "ER = [12];\n",
    "UR = [1];\n",
    "layer_thicknesses = [thickness_slab]; #this retains SI unit convention\n",
    "ref = list(); trans = list();\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(len(wavelengths)): #in SI units\n",
    "    ## initialize global scattering matrix: should be a 4x4 identity so when we start the redheffer star, we get I*SR\n",
    "\n",
    "    Sg11 = np.matrix(np.zeros((2, 2)));\n",
    "    Sg12 = np.matrix(np.eye(2, 2));\n",
    "    Sg21 = np.matrix(np.eye(2, 2));\n",
    "    Sg22 = np.matrix(np.zeros((2, 2)));  # matrices\n",
    "    Sg = np.block([[Sg11, Sg12], [Sg21, Sg22]]);  # initialization is equivelant as that for S_reflection side matrix\n",
    "    Sg0 = Sg;\n",
    "\n",
    "    ### ================= Working on the Reflection Side =========== ##\n",
    "    Pr, Qr, kzr = pq.P_Q_kz(kx, ky, e_r, m_r)\n",
    "\n",
    "    ## ============== values to keep track of =======================##\n",
    "    S_matrices = list();\n",
    "    kz_storage = [kzr];\n",
    "    X_storage = list();\n",
    "    ## ==============================================================##\n",
    "\n",
    "    # define vacuum wavevector k0\n",
    "    k0 = kmagnitude_scan[i]; #this is in SI units, it is the normalization constant for the k-vector\n",
    "    lam0 = wavelengths[i]; #k0 and lam0 are related by 2*pi/lam0 = k0\n",
    "\n",
    "    ## modes of the layer\n",
    "    Om_r = np.matrix(cmath.sqrt(-1) * kzr * I);\n",
    "    X_storage.append(Om_r);\n",
    "    W_ref = I;\n",
    "    V_ref = Qr * Om_r.I; #can't play games with V like with W because matrices for V are complex\n",
    "\n",
    "    ## calculating A and B matrices for scattering matrix\n",
    "    Ar, Br = sm.A_B_matrices(Wg, W_ref, Vg, V_ref);\n",
    "\n",
    "    S_ref, Sr_dict = sm.S_R(Ar, Br); #scatter matrix for the reflection region\n",
    "    S_matrices.append(S_ref);\n",
    "    Sg, D_r, F_r = rs.RedhefferStar(Sg, S_ref);\n",
    "\n",
    "    Q_storage = list(); P_storage=  list();\n",
    "    ## go through the layers\n",
    "    for i in range(len(ER)):\n",
    "        #ith layer material parameters\n",
    "        e = ER[i]; m = UR[i];\n",
    "\n",
    "        #longitudinal k_vector\n",
    "        P, Q, kzl = pq.P_Q_kz(kx, ky, e, m)\n",
    "        kz_storage.append(kzl)\n",
    "\n",
    "        ## E-field modes that can propagate in the medium\n",
    "        W_i = I;\n",
    "        ## corresponding H-field modes.\n",
    "        Om = cmath.sqrt(-1) * kzl * I; X_storage.append(Om)\n",
    "        V_i = Q * np.linalg.inv(Om);\n",
    "\n",
    "        #now defIne A and B\n",
    "        A,B = sm.A_B_matrices(Wg, W_i, Vg, V_i);\n",
    "\n",
    "        #calculate scattering matrix\n",
    "        S_layer, Sl_dict = sm.S_layer(A, B, layer_thicknesses[i], k0, Om)\n",
    "        S_matrices.append(S_layer);\n",
    "\n",
    "        ## update global scattering matrix using redheffer star\n",
    "        Sg, D_i, F_i = rs.RedhefferStar(Sg, S_layer);\n",
    "\n",
    "    ##========= Working on the Transmission Side==============##\n",
    "    Pt, Qt, kz_trans = pq.P_Q_kz(kx, ky, e_t, m_t);kz_storage.append(kz_trans);\n",
    "\n",
    "    Om = cmath.sqrt(-1) * kz_trans * I;\n",
    "    Vt = Qt*np.linalg.inv(Om);\n",
    "\n",
    "    #get At, Bt\n",
    "    At, Bt = sm.A_B_matrices(Wg, I, Vg, Vt)\n",
    "\n",
    "    ST, ST_dict = sm.S_T(At, Bt)\n",
    "    S_matrices.append(ST);\n",
    "    #update global scattering matrix\n",
    "    Sg, D_t, F_t = rs.RedhefferStar(Sg, ST);\n",
    "\n",
    "    K_inc_vector = n_i * k0*np.matrix([np.sin(theta) * np.cos(phi), \\\n",
    "                                    np.sin(theta) * np.sin(phi), np.cos(theta)]);\n",
    "\n",
    "    # cinc is the c1+\n",
    "    E_inc, cinc, Polarization = ic.initial_conditions(K_inc_vector, theta,  normal_vector, pte, ptm)\n",
    "\n",
    "    ## COMPUTE FIELDS\n",
    "    Er = Sg[0:2,0:2]*cinc; #S11; #(cinc = initial mode amplitudes), cout = Sg*cinc; #2d because Ex, Ey...\n",
    "    Et = Sg[2:,0:2]*cinc;  #S21\n",
    "\n",
    "    Er = np.squeeze(np.asarray(Er));\n",
    "    Et = np.squeeze(np.asarray(Et));\n",
    "\n",
    "    Erx = Er[0]; Ery = Er[1];\n",
    "    Etx = Et[0]; Ety = Et[1];\n",
    "\n",
    "    # apply the grad(E) = 0 equation to get z components\n",
    "    Erz = -(kx*Erx+ky*Ery)/kzr;\n",
    "    Etz = -(kx*Etx+ky*Ety)/kz_trans; ## using divergence of E equation here\n",
    "\n",
    "    #add in the Erz component to vectors\n",
    "    Er = np.matrix([Erx, Ery, Erz]); #a vector\n",
    "    Et = np.matrix([Etx, Ety, Etz]);\n",
    "\n",
    "    R = np.linalg.norm(Er)**2;\n",
    "    T = np.linalg.norm(Et)**2;\n",
    "    ref.append(R);\n",
    "    trans.append(T);\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.640789989847857e-17\n",
      "2.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "2.2110831935702664\n",
      "1\n",
      "2.019771781742534\n",
      "2\n",
      "2.0\n",
      "0.0\n",
      "[[ 9.60e-01-0.04j  0.00e+00+0.j   -1.18e-02-0.28j  0.00e+00+0.j  ]\n",
      " [ 0.00e+00+0.j    9.97e-01-0.01j  0.00e+00+0.j   -8.72e-04-0.08j]\n",
      " [-1.18e-02-0.28j  0.00e+00+0.j    9.60e-01-0.04j  0.00e+00+0.j  ]\n",
      " [ 0.00e+00+0.j   -8.72e-04-0.08j  0.00e+00+0.j    9.97e-01-0.01j]]\n",
      "[[ 9.60e-01-0.04j  0.00e+00+0.j   -1.18e-02-0.28j  0.00e+00+0.j  ]\n",
      " [ 0.00e+00+0.j    9.97e-01-0.01j  0.00e+00+0.j   -8.72e-04-0.08j]\n",
      " [-1.18e-02-0.28j  0.00e+00+0.j    9.60e-01-0.04j  0.00e+00+0.j  ]\n",
      " [ 0.00e+00+0.j   -8.72e-04-0.08j  0.00e+00+0.j    9.97e-01-0.01j]]\n"
     ]
    }
   ],
   "source": [
    "## check that Sg is unitary (medium is lossless)\n",
    "check = Sg*Sg.I;\n",
    "print(np.linalg.norm(np.eye(4,4)-check))\n",
    "#Sg is also supposed to be unitary\n",
    "print(np.linalg.norm(Sg))\n",
    "\n",
    "## BASIC PLOTTING\n",
    "ref = np.array(ref);\n",
    "trans = np.array(trans)\n",
    "plt.figure();\n",
    "plt.plot(wavelengths/L0, ref);\n",
    "plt.plot(wavelengths/L0, trans);\n",
    "plt.legend(['R', 'T'])\n",
    "plt.xlabel('wavelength (um)')\n",
    "plt.show()\n",
    "\n",
    "# def fsr(ng, l1, theta, lambda_0):\n",
    "#     return lambda_0**2/(2*ng*l1*np.cos(theta)+lambda_0)\n",
    "\n",
    "## calculate global S after the loop\n",
    "S1 = Sg0;\n",
    "for i in range(0, len(S_matrices)):\n",
    "    print(i);\n",
    "    S1, D,F = rs.RedhefferStar(S1, S_matrices[i]);\n",
    "    print(np.linalg.norm(S1))\n",
    "\n",
    "#check that S1 and Sg match\n",
    "print(np.linalg.norm(S1-Sg))\n",
    "np.set_printoptions(precision=2)\n",
    "print(S1)\n",
    "print(Sg)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Comparison with Analytic Expression\n",
    "We use the impedance model\n",
    "The impedance of a medium is:\n",
    "$$\n",
    "Z_{0,TM}^{(i)} = \\sqrt{\\frac{\\mu}{\\epsilon}}\\frac{1}{cos(\\theta)}\n",
    "$$\n",
    "This is for the TM polarization\n",
    "\n",
    "For the other polarization, we have\n",
    "$$\n",
    "Z_{0,TE}^{(i)} = \\sqrt{\\frac{\\mu}{\\epsilon}}cos(\\theta)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Fabry_Perot_Spectra_Analytic(wavelengths, e_r, slab_thickness, theta, polarization = 'TE'):\n",
    "    '''\n",
    "    source is based in EE236 guided waves by Prof. Shanhui Fan\n",
    "    no need for a lattice constant\n",
    "    :param wavelengths SI units of meters:\n",
    "    :param e_r (usually between 1 and 12)\n",
    "    :param slab_thickness SI units of meters\n",
    "    :param theta = angle in degrees\n",
    "    :return:\n",
    "    '''\n",
    "    degrees = np.pi / 180;\n",
    "    angle_term = np.cos(theta*degrees)\n",
    "\n",
    "    if(polarization == 'TM'):\n",
    "        angle_term = 1/np.cos(theta*degrees)\n",
    "    \n",
    "    ## 1/cos(theta) is TM, cos(theta) is TE\n",
    "    \n",
    "    print(angle_term)\n",
    "    eps0 = 8.854e-12;\n",
    "    mu0 = 4 * np.pi *1e-7;\n",
    "    ## reflection and transmission materials\n",
    "    Z_1 = np.sqrt(mu0/eps0)*angle_term; #incident\n",
    "    \n",
    "    Z_3 = np.sqrt(mu0/eps0)*angle_term; #slab always leaves the medium in the same angle it came \n",
    "                                        #(assuming inc and out are same media)\n",
    "    \n",
    "    #do we need to calculate angle in the slab medium using Snell's law?\n",
    "    \n",
    "    # slab specifications\n",
    "    l1 = slab_thickness;\n",
    "    Z_2 = np.sqrt(mu0/eps0)*(1/e_r**0.5); #medium impedance, no angle dependence\n",
    "\n",
    "    ## define intermediate variables for impedance transform\n",
    "\n",
    "    im = cmath.sqrt(-1);\n",
    "    ref = list();\n",
    "    trans = list()\n",
    "    ## specify wavelength range to do plotting\n",
    "\n",
    "    for lam0 in wavelengths:\n",
    "        ## we need kz in the layer... omega = ck/n\n",
    "        #kz = sqrt(k_0^2 - kx^2)\n",
    "        k0 = 2*np.pi/lam0;\n",
    "        ## use snell's law to get the angle in the new medium\n",
    "        theta_medium = np.arcsin(np.sin(theta*degrees)*(1/e_r**0.5));# already in radian units\n",
    "        \n",
    "        kz = (e_r)**0.5*(2*np.pi/lam0)*np.cos(theta_medium); #assuming normal incidence\n",
    "        #kz = np.sqrt(k0**2-kx**2)\n",
    "        Zd = Z_2*(Z_3 - 1j*Z_2*np.tan(kz*l1))/(Z_2 - 1j*Z_3*np.tan(kz*l1))\n",
    "        r = (Zd - Z_1)/(Zd + Z_1);\n",
    "        ref.append(abs(r)**2);\n",
    "        trans.append(1-abs(r)**2);\n",
    "\n",
    "    return ref, trans\n",
    "\n",
    "    '''\n",
    "    behavior of the analytic model depends on where the angle term is (numerator vs denominator)\n",
    "    '''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5000000000000001\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# slab_thickness = 0.76*1e-6;\n",
    "# e_r = 12;\n",
    "# theta = 60\n",
    "ref_a, trans_a = Fabry_Perot_Spectra_Analytic(wavelengths,12, thickness_slab, 60, polarization = 'TE')\n",
    "plt.figure()\n",
    "plt.plot(wavelengths*1e6, ref_a);\n",
    "#lt.plot(wavelengths*1e6, trans_a);\n",
    "plt.plot(wavelengths*1e6, ref);\n",
    "\n",
    "plt.xlabel('wavelength (um)')\n",
    "plt.legend(('reflection', 'transmission'))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Off normal incidence\n",
    "At off normal incidence, a fabry perot slab becomes a narrow band pass filter\n",
    "that is, if you run the code at off-normal incidence, you will actually see that th reflection becomes better and better...and more broad-band, which is quite amazing\n",
    "In fact, because of this, many dielectric structures become very broad-band at extreme off normal incidence (i.e. the bragg mirror)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Angle Scan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.    0.91  1.82  2.73  3.64  4.55  5.45  6.36  7.27  8.18  9.09 10.\n",
      " 10.91 11.82 12.73 13.64 14.55 15.45 16.36 17.27 18.18 19.09 20.   20.91\n",
      " 21.82 22.73 23.64 24.55 25.45 26.36 27.27 28.18 29.09 30.   30.91 31.82\n",
      " 32.73 33.64 34.55 35.45 36.36 37.27 38.18 39.09 40.   40.91 41.82 42.73\n",
      " 43.64 44.55 45.45 46.36 47.27 48.18 49.09 50.   50.91 51.82 52.73 53.64\n",
      " 54.55 55.45 56.36 57.27 58.18 59.09 60.   60.91 61.82 62.73 63.64 64.55\n",
      " 65.45 66.36 67.27 68.18 69.09 70.   70.91 71.82 72.73 73.64 74.55 75.45\n",
      " 76.36 77.27 78.18 79.09 80.   80.91 81.82 82.73 83.64 84.55 85.45 86.36\n",
      " 87.27 88.18 89.09 90.  ]\n"
     ]
    },
    {
     "ename": "AttributeError",
     "evalue": "'numpy.ndarray' object has no attribute 'append'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-7-fe3e1d24233c>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m     30\u001b[0m     \u001b[0mZd\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mZ_2\u001b[0m\u001b[1;33m*\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mZ_3\u001b[0m \u001b[1;33m-\u001b[0m \u001b[1;36m1j\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mZ_2\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtan\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkz\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0ml1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mZ_2\u001b[0m \u001b[1;33m-\u001b[0m \u001b[1;36m1j\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mZ_3\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtan\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkz\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0ml1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     31\u001b[0m     \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mZd\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mZ_1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mZd\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mZ_1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m;\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 32\u001b[1;33m     \u001b[0mref\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mabs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m;\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     33\u001b[0m     \u001b[0mtrans\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mabs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m;\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     34\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'append'"
     ]
    }
   ],
   "source": [
    "theta_scan = np.linspace(0,90, 100);\n",
    "print(theta_scan)\n",
    "wvlen = 2.5*1e-6;\n",
    "eps0 = 8.854e-12;\n",
    "mu0 = 4 * np.pi *1e-7;\n",
    "## reflection and transmission materials\n",
    "\n",
    "\n",
    "#do we need to calculate angle in the slab medium using Snell's law?\n",
    "\n",
    "# slab specifications\n",
    "l1 = 0.76e-6;\n",
    "Z_2 = np.sqrt(mu0/eps0)*(1/e_r**0.5); #medium impedance, no angle dependence\n",
    "\n",
    "## define intermediate variables for impedance transform\n",
    "\n",
    "im = cmath.sqrt(-1);\n",
    "ref_ang_scan = list();\n",
    "trans_ang_scan = list()\n",
    "## specify wavelength range to do plotting\n",
    "\n",
    "for theta in theta_scan:\n",
    "    ## we need kz in the layer... omega = ck/n\n",
    "    angle_term = 1/np.cos(theta*np.pi/180);\n",
    "    Z_1 = np.sqrt(mu0/eps0)*angle_term; #incident\n",
    "    Z_3 = np.sqrt(mu0/eps0)*angle_term; #slab always leaves the medium in the same angle it came \n",
    "                                        #(assuming inc and out are same media)\n",
    "    kz = (e_r)**0.5*(2*np.pi/wvlen)*np.cos(theta*degrees); #assuming normal incidence\n",
    "\n",
    "    Zd = Z_2*(Z_3 - 1j*Z_2*np.tan(kz*l1))/(Z_2 - 1j*Z_3*np.tan(kz*l1))\n",
    "    r = (Zd - Z_1)/(Zd + Z_1);\n",
    "    ref.append(abs(r)**2);\n",
    "    trans.append(1-abs(r)**2);\n",
    "    \n",
    "plt.plot(theta_scan, ref_ang_scan);\n",
    "plt.plot(theta_scan, trans_ang_scan);\n",
    "plt.legend(('R', 'T'))\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It's not obvious what the angle scan should reveal.\n",
    "In the single interface (two semi-infinite media) case, we have the typical Brewster's angle for the TM polarization with the reflection going to 1 as the angle gets closer to 90 degrees\n",
    "\n",
    "## ANGLE SCAN NUMERICALLY"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
